#ifndef PDTGRAPHVISITOR_H
#define PDTGRAPHVISITOR_H
#include "PDTCodeGraph.h"
#include <vector>
#include <stack>

//added because of circular includes
class PDTNode;

class PDTGraphVisitor {
public:
	virtual bool pre(PDTNode * me)=0;
	virtual bool beforeChild(PDTNode * me, PDTNode* child, unsigned int i)=0;
	virtual bool afterChild(PDTNode * me, PDTNode* child, unsigned int i)=0;
	virtual bool post(PDTNode * me)=0;

};

class PDTDefaultVisitor: public PDTGraphVisitor {
public:
	virtual bool pre(PDTNode * me);
	virtual bool beforeChild(PDTNode * me, PDTNode* child, unsigned int i);
	virtual bool afterChild(PDTNode * me, PDTNode* child, unsigned int i);
	virtual bool post(PDTNode * me);
	virtual ~PDTDefaultVisitor() {
	}
};


#endif // PDTGRAPHVISITOR_H
